package com.example.aigc_education.config;

import com.google.code.kaptcha.text.impl.DefaultTextCreator;

import java.util.Random;

/**
 * 验证码文本生成器，继承自DefaultTextCreator，用于生成包含简单数学运算的验证码。
 * 运算类型包括：乘法、除法、加法和减法。
 * 验证码格式为：数字1+数字2=？@结果。
 */
public class KaptchaTextCreator extends DefaultTextCreator
{
    // 定义可用的数字字符数组
    private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(",");

    /**
     * 生成一个包含简单数学运算的验证码文本。
     *
     * @return 生成的验证码文本，格式为：数字1+数字2=？@结果。
     */
    @Override
    public String getText()
    {
        Integer result = 0; // 运算结果
        Random random = new Random(); // 随机数生成器

        // 生成两个随机数作为数学运算的数字
        int x = random.nextInt(10);
        int y = random.nextInt(10);

        StringBuilder suChinese = new StringBuilder(); // 用于构建验证码文本

        // 随机选择一个运算符（0为乘法，1为除法，2为加法，3为减法）
        int randomoperands = random.nextInt(3);

        if (randomoperands == 0)
        {
            // 乘法运算
            result = x * y;
            suChinese.append(CNUMBERS[x]);
            suChinese.append("*");
            suChinese.append(CNUMBERS[y]);
        }
        else if (randomoperands == 1)
        {
            // 除法运算，避免除数为0的情况
            if ((x != 0) && y % x == 0)
            {
                result = y / x;
                suChinese.append(CNUMBERS[y]);
                suChinese.append("/");
                suChinese.append(CNUMBERS[x]);
            }
            else
            {
                // 若除法不可行，则转为加法
                result = x + y;
                suChinese.append(CNUMBERS[x]);
                suChinese.append("+");
                suChinese.append(CNUMBERS[y]);
            }
        }
        else
        {
            // 加法或减法运算
            if (x >= y)
            {
                // x大于等于y时为减法
                result = x - y;
                suChinese.append(CNUMBERS[x]);
                suChinese.append("-");
                suChinese.append(CNUMBERS[y]);
            }
            else
            {
                // x小于y时为减法，但数字顺序交换
                result = y - x;
                suChinese.append(CNUMBERS[y]);
                suChinese.append("-");
                suChinese.append(CNUMBERS[x]);
            }
        }

        // 将结果以特殊格式添加到验证码文本中
        suChinese.append("=?@" + result);
        return suChinese.toString();
    }
}
